home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 744 / fo2 / sources_fo2 / modify.c < prev    next >
C/C++ Source or Header  |  1995-03-18  |  2KB  |  98 lines

  1. #include "defs.h"
  2.  
  3. Prototype struct DataB *ModifyDataHder(WORD bloc,WORD nfhB,WORD ndataB,LONG fh);
  4. Prototype ModifyDataNext(struct DataB *adr,WORD ndataNext);
  5. Prototype ModifyFList(WORD bloc,WORD nfhB,WORD *nflB,WORD *datafree,WORD data);
  6.  
  7.  
  8. struct DataB *ModifyDataHder(bloc,nfhB,ndataB,fh)
  9. WORD bloc,nfhB,ndataB;
  10. LONG fh;
  11. {
  12. struct SDataB *dlistD;
  13. struct DataB  *adr;
  14.  
  15. #ifdef DEBUG
  16.     fprintf(FPointer,"in MofifyDataHder() bloc: %d, nfhB : %d, ndataB: %d\n",bloc,nfhB,ndataB);
  17. #endif
  18.     dlistD=whereB(bloc);
  19.     if (dlistD==0) {NotSet(bloc,fh); exit(0);}
  20.     else
  21.     dlistD->dl_Bloc2=ndataB;
  22.  
  23.     dlistD->dl_type8.dl_FileHeader=nfhB;
  24.     adr=dlistD->dl_AdrB;
  25.     if (FFS==0) adr->HeaderKey=nfhB;
  26.     return(adr);
  27. }
  28.  
  29. ModifyDataNext(adr,ndataNext)
  30. struct DataB *adr;
  31. WORD ndataNext;
  32. {
  33.     if (FFS==0)
  34.     {if (adr->NextDataBlock)    adr->NextDataBlock=ndataNext;}
  35.  
  36. }
  37.  
  38. /* Renvoie n° du prochain bloc libre */
  39.  
  40. ModifyFList(bloc,nfhB,nflB,datafree,data)
  41. WORD bloc,nfhB,*nflB,*datafree,data;
  42. {
  43. struct SFileListB *dlistFL;
  44. struct FileListB  *adr;
  45. LONG   *AdrD;
  46. WORD   n,ret=0,ext;
  47. BYTE   first;
  48. #ifdef DEBUG
  49.     printf("in MofifyFList() bloc: %d, nfhB : %d, nflB: %d,datafree: %d\n",bloc,nfhB,*nflB,(*datafree)+1);
  50. #endif
  51.     dlistFL=whereB(bloc);
  52.     if (dlistFL==0) NotSet(bloc,5);
  53.     else
  54.     {
  55.         /*printf(" Type du bloc: %d\n",dlistFL->dl_Type);*/
  56.         dlistFL->dl_type13.dl_FileHeader=nfhB;
  57.         dlistFL->dl_Bloc2=*nflB;
  58.         adr=(struct FileListB *)dlistFL->dl_AdrB;
  59.         adr->ParentFH=nfhB;
  60.         adr->HeaderKey=*nflB;
  61.         if (FLnog) Inc(nflB); else (*nflB)++;
  62.         
  63.         first=1;
  64.         for (n=71;n!=-1;n--)
  65.         {
  66.             if(adr->DataTable[n])
  67.             {
  68.                 AdrD=ModifyDataHder(adr->DataTable[n],nfhB,*datafree,bloc);
  69.                 adr->DataTable[n]=*datafree;
  70.                 if (first) {adr->FirstDataB=*datafree; first=0;}
  71.  
  72.                 if (data==0) Inc(datafree); else (*datafree)++;
  73.  
  74.                 if (n)
  75.                 {
  76.                     if (data==0) ModifyDataNext(AdrD,*datafree);
  77.                     else ModifyDataNext(AdrD,*datafree+1);
  78.                 }
  79.                 else
  80.                 {
  81.                     if (FLnog) ModifyDataNext(AdrD,Nextdfree(datafree));
  82.                     else ModifyDataNext(AdrD,*datafree);
  83.                 }
  84.             }
  85.         }
  86.  
  87.         ext=*nflB;
  88.         if (adr->Extension) 
  89.         {
  90.             ret+=ModifyFList(adr->Extension,nfhB,nflB,datafree,data);
  91.             adr->Extension=ext;
  92.             return(++ret);
  93.         }
  94.  
  95.         return(ext);
  96.     }
  97. }
  98.